#ifndef CAMPO_H_
#define CAMPO_H_

#define Pos struct _Pos
#define Campo struct _Campo
#define Casa struct _Casa
#define TipoCasa enum _TipoCasa

TipoCasa {
	zero,
	uma,
	duas,
	tres,
	quatro,
	cinco,
	seis,
	sete,
	oito,
	bordaHorizontal,
	bordaVertical,
	bordaSupEsq,
	bordaSupDir,
	bordaInfEsq,
	bordaInfDir,
	bomba,
	bombaHumano,
	bombaComputador
};

Casa {
	int visivel;
	TipoCasa tipoCasa;
};

Pos {
	int m;
	int n;
};

struct _Campo {
	Casa *(*tabuleiro);
	int totBombas;
	int tamanho;
};

Campo alocarCampo(int);
void montarCampo(Campo);
Casa * getCasa(Campo, Pos);
void setCasa(Campo, Pos, Casa);
void desalocarCampo(Campo);
void imprimirCampo(Campo);
int ehBomba(TipoCasa);
int ehNumero(TipoCasa);
int ehBorda(TipoCasa);
int bombasFechadasAoRedor(Casa*, Pos, Campo);
int casasInvisiveisAoRedor(Pos, Campo);

#endif /* CAMPO_H_ */
